package com.it.conteroller;

import com.it.conteroller.impl.Calculator;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;

//
/*
* TODO 【spring】 (1)、Spring AOP 面向切面编程技术
* 【说明】：前言
*             AOP（面向切面）是对OOP（面向编程）的一种补充和完善、OOP通过封装、继承、多态来
*             建立一个对象的层次结构、但OOP只能定义纵向的关系、例如一些重复代码、如日志代码、散布在
*             所有对象中、导致大量代码的重复
*
*         什么是面向切面编程技术、
*             1、AOP、利用一种横切的技术、剖开方法的内部、将一些重复代码、抽离出来、统一封装到一个类（代理）中
*               进行管理、这就是所谓的切面
*             2、AOP采用的是动态代理的技术、由SpringAOP内部帮我实现动态代理、开发者只需要书写少量的代码
*               指定生效的返回即可完成切面编程的实现
*
*         AOP的应用场景
*            日志记录、事务处理、安全控制、性能监控、异常处理、缓存控制、动态代理等
*
* 【实现】：
*       1、定义一个切面类、用于抽取方法中的重复代码、由这个切面类统一管理、他会切入到指定生效的方法中
*          使用 @Aspect 进行标注、并且这个切面类必须装配到IOC容器中
*       2、在配置类中开启 切面类的支持：@EnableAspectJAutoProxy
*       3、在切面类配置其方法即可
* 【注解】：
*       @Aspect 标注的类 表示为切面类
*       @EnableAspectJAutoProxy：在配置类中标记该注解表示开启切面类支持
*
*
* */
@Controller(value = "SpringAop")
public class spring_aop implements Calculator {
    @Override
    public int add(int i, int j) {
        int add = i + j;
        return add;
    }

    @Override
    public int sub(int i, int j) {
        int sub = i - j;
        return sub;
    }

    @Override
    public int mul(int i, int j) {
        int mul = i * j;
        return mul;
    }

    @Override
    public int div(int i, int j) {
        int div = i / j;
        return div;
    }
}
